/**
 * Created by xingzi on 2016/12/13 0013.
 */

/**
 * 操作对象发送ajax请求
 * @param url 请求地址
 * @param data 请求参数
 * @param callback 成功回调
 * @param param 回调参数
 * @param shade 是否遮罩
 */
function ajax_req(url, data, callback, param, shade) {
    if (shade == true) var loading = layer.load(2);
    $.post(url, data, function (ret) {
        shade == true && layer.close(loading);
        ajax_progress(ret, callback, param);
    }, 'json')
}

/**
 * ajax 处理，对应服务端 ajax_return_adv 方法返回的 json 数据处理
 * @param data ajax返回数据
 * @param callback 成功回调函数
 * @param param 回调参数
 */
function ajax_progress(data, callback, param) {
    if (data.code == 1) {
        if (typeof data.opt == "object") {
            var index = parent.layer.getFrameIndex(window.name);
            if (data.opt.close) {
                parent.layer.close(index);
            }
            if (data.opt.redirect == 'current') {
                // 当前页重定向
                if (!data.opt.url) {
                    // 刷新
                    window.location.reload();
                } else {
                    // 重定向到 url
                    window.location.href = data.opt.url;
                }
            } else if (data.opt.redirect == 'parent') {
                // 父层重定向
                if (!data.opt.url) {
                    // 刷新
                    window.parent.location.reload();
                } else {
                    // 重定向到 url
                    window.parent.location.href = data.opt.url;
                }
                // 关闭当前层
                parent.layer.close(index);
            }
            // 父层弹出信息
            if (data.opt.alert) {
                parent.layer.alert(data.opt.alert);
                parent.layer.close(index);
            }
            if (!data.opt.close && !data.opt.redirect && !data.opt.alert) {
                parent.layer.msg(data.msg);
                parent.layer.close(index);
            }
        } else {
            layer.msg(data.msg);
        }
        if (typeof callback == "function") {
            if (typeof param != "undefined" && param) {
                param.unshift(data)
            } else {
                param = [data];
            }
            callback.apply(this, param);
        }
    } else {
        layer.alert(data.msg, {title: "错误信息", icon: 2});
    }
}

// 点击排序
function sort(field) {
    var v = $("input[name='_order']").val() == field ? ($("input[name='_sort']").val() == 'desc' ? 'asc' : 'desc') : 'desc';
    $("input[name='_sort']").val(v);
    $("input[name='_order']").val(field);
    $("#search-form").submit();
}

// ajax 抓取页面 form 为表单id
function ajax_get_table(form, page) {
    cur_page = page; //当前页面 保存为全局变量
    $.ajax({
        type: 'GET',
        url: base_url + '?page=' + page,
        data: $('#' + form).serialize(),
        async: false,
        success: function (res) {
            if (res.code == 1) {
                //数据加载完关闭动画
                $(".spiner-box").css('display', 'none');
                $("#ajax_table").html(res.data);
                //全选按钮
                $("table thead th input:checkbox").on("click", function () {
                    $(this).closest("table").find("tr > td:first-child input:checkbox").prop("checked", $("table thead th input:checkbox").prop("checked"));
                });
                window.scrollTo(0, 0);
            } else {
                $(".spiner-box").css('display', 'none');
                layer.msg(res.msg);
            }

        },
        error: function (xhr, textStatus) {
            $(".spiner-box").css('display', 'none');
            if (textStatus == 'timeout') {
                //处理超时
                layer.msg('加载数据超时，请刷新重试');
            }
            else {
                layer.msg('加载数据出错，请刷新重试');
            }
        }
    });
}

/**
 * 删除操作项
 * @param obj this
 * @param id 对象id
 * @param url 删除地址
 * @param fn 回调函数
 */
function del(obj, id, url, fn) {
    layer.confirm('您确定要删除吗？', {
        btn: ['确定', '取消'],
        title: '提示',
        icon: 3
    }, function () {
        $.post(url, {id: id}, function (res) {
            if (res.code == 1) {
                layer.msg('已删除！', {icon: 1, time: 1000});
                window.location.reload();
            } else {
                layer.alert(res.msg);
            }
            fn && fn(res);
        }, 'json')
    }, function (index) {
        layer.close(index);
    });
}

/**
 * 批量删除操作项
 * @param url 批量删除地址
 * @param checkbox_group checkbox组的名称，默认 id[]
 */
function del_all(url) {
    layer.confirm('您确定要删除吗？', {
        btn: ['确定', '取消'],
        title: '提示',
        icon: 3
    }, function () {
        id = [];
        $(":checked[name='id[]']").each(function () {
            id.push($(this).val())
        });
        $.post(url, {id: id.join(',')}, function (res) {
            if (res.code == 1) {
                parent.layer.msg('已删除！', {icon: 1, time: 1000});
                window.location.reload();
            } else {
                layer.alert(res.msg);
            }
        }, 'json')
    }, function (index) {
        layer.close(index);
    });
}

/**
 * 获取错误信息显示位置
 * @param element 表单元素类型
 * @returns {*|{name}}
 */
function getMsgBox(element) {
    switch (element.attr('type')) {
        case 'radio':
            var obj = element.parent().parent().next();
            break;
        case 'checkbox':
            var obj = element.parent().parent().next();
            break;
        default:
            var obj = element.parent().next();
            break;
    }
    return obj;
}

/**
 * 检查浏览器是否支持某属性
 * @param attrName
 * @param attrValue
 * @returns {boolean}
 */
function attr_support(attrName, attrValue) {
    try {
        var element = document.createElement('div');
        if (attrName in element.style) {
            element.style[attrName] = attrValue;
            return element.style[attrName] === attrValue;
        } else {
            return false;
        }
    } catch (e) {
        return false;
    }
}

/**
 * 重新加载当前页
 */
function page_reload() {
    setTimeout(function () {
        window.location.reload();
    }, 1000);
}

/**
 * 强制替换当前页
 * @param url 新页面url
 */
function page_replace(url) {
    setTimeout(function () {
        location.replace(url);
    }, 1000);
}

/**
 * 返回上一页
 */
function page_goback() {
    setTimeout(function () {
        history.go(-1);
    }, 1000);
}

//获取字符串长度（汉字算两个字符，字母数字算一个）
function getByteLen(val) {
    var len = 0;
    for (var i = 0; i < val.length; i++) {
        var a = val.charAt(i);
        if (a.match(/[^\x00-\xff]/ig) != null) {
            len += 2;
        }
        else {
            len += 1;
        }
    }
    return len;
}

/*textarea 字数限制*/
function textarealength(obj, maxlength) {
    var v = $(obj).val();
    var l = getByteLen(v);
    var length_obj = $(obj).parent().find(".textarea-length");
    length_obj.text(l);
    l > maxlength ? length_obj.addClass("text-danger") : length_obj.removeClass("text-danger");
}